--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 7d868b4db62f49ab96c04f2b699dc8538238cdc5
Parents : 6ae99dc
Author : Mark Qvist <mark@unsigned.io>
Date : 2025-04-13T00:11:21+02:00
Support for XIAO ESP32S3
Changes
7 files changed, 59 insertions(+), 66 deletions(-)
Diff
diff --git a/Boards.h b/Boards.h
index f93790f..e76e38b 100644
--- a/Boards.h
+++ b/Boards.h
@@ -65,9 +65,10 @@
#define MODEL_DB 0xDB // LilyGO T-Beam Supreme, 433 MHz
#define MODEL_DC 0xDC // LilyGO T-Beam Supreme, 868 MHz
- #define PRODUCT_SEEED_XIAO_ESP32S3 0xEB
- #define BOARD_SEEED_XIAO_ESP32S3 0x3E
- #define MODEL_DD 0xDD
+ #define PRODUCT_XIAO_S3 0xEB
+ #define BOARD_XIAO_S3 0x3E
+ #define MODEL_DE 0xDE // Xiao ESP32S3 with Wio-SX1262 module, 433 MHz
+ #define MODEL_DD 0xDD // Xiao ESP32S3 with Wio-SX1262 module, 868 MHz
#define PRODUCT_T32_10 0xB2
#define BOARD_LORA32_V1_0 0x39
@@ -144,10 +145,6 @@
#endif
#endif
-// test build - KJB
-#define BOARD_MODEL BOARD_SEEED_XIAO_ESP32S3
-//#define BOARD_MODEL BOARD_HELTEC32_V3
-
#define HAS_DISPLAY false
#define HAS_BLUETOOTH false
#define HAS_BLE false
@@ -602,19 +599,17 @@
#endif
#endif
- #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
+ #elif BOARD_MODEL == BOARD_XIAO_S3
#define IS_ESP32S3 true
#define MODEM SX1262
#define DIO2_AS_RF_SWITCH true
#define HAS_BUSY true
#define HAS_TCXO true
-// #define OCP_TUNED 0x38
- #define HAS_DISPLAY true
-// #define HAS_CONSOLE true
+ #define HAS_DISPLAY false
+ #define HAS_CONSOLE true
#define HAS_BLUETOOTH false
#define HAS_BLE true
-// #define HAS_PMU true
#define HAS_NP false
#define HAS_SD false
#define HAS_EEPROM true
@@ -624,41 +619,23 @@
#define PIN_WAKEUP GPIO_NUM_21
#define WAKEUP_LEVEL 0
-// #define PMU_IRQ 40
-// #define I2C_SCL 41
-// #define I2C_SDA 42
-
- // Wio-SX1262 button pulls down GPIO21
- // THis is shared with the Yellow LED
- // on the ESP32S3 (also active Low)
const int pin_btn_usr1 = 21;
-
- const int pin_cs = 41; //16;
- const int pin_reset = 42; //14;
- const int pin_sclk = 7; //11;
- const int pin_mosi = 9; //15;
- const int pin_miso = 8; //13;
+ const int pin_cs = 41;
+ const int pin_reset = 42;
+ const int pin_sclk = 7;
+ const int pin_mosi = 9;
+ const int pin_miso = 8;
const int pin_tcxo_enable = -1;
- const int pin_dio = 39; //21;
- const int pin_busy = 40; //18;
+ const int pin_dio = 39;
+ const int pin_busy = 40;
-// const int SD_MISO = 37;
-// const int SD_MOSI = 35;
-// const int SD_CLK = 36;
-// const int SD_CS = 47;
-
-// const int IMU_CS = 34;
-
- // HAS LED/tx on Wio board - 48 Hi/ON
- // LED 21 on ESP board - Lo/ON/Yellow
- // shared with button input.
#if HAS_NP == false
#if defined(EXTERNAL_LEDS)
- const int pin_led_rx = -1;
- const int pin_led_tx = 48; //47;
+ const int pin_led_rx = 48;
+ const int pin_led_tx = 48;
#else
- const int pin_led_rx = -1;
- const int pin_led_tx = 48; //47;
+ const int pin_led_rx = 48;
+ const int pin_led_tx = 48;
#endif
#endif
diff --git a/Display.h b/Display.h
index 7062e0d..c42283c 100644
--- a/Display.h
+++ b/Display.h
@@ -85,6 +85,12 @@
#define SCL_OLED 18
#define SDA_OLED 17
#define DISP_CUSTOM_ADDR false
+#elif BOARD_MODEL == BOARD_XIAO_S3
+ #define DISP_RST -1
+ #define DISP_ADDR 0x3C
+ #define SCL_OLED 6
+ #define SDA_OLED 5
+ #define DISP_CUSTOM_ADDR true
#else
#define DISP_RST -1
#define DISP_ADDR 0x3C
@@ -278,6 +284,8 @@ bool display_init() {
#endif
#elif BOARD_MODEL == BOARD_TBEAM_S_V1
Wire.begin(SDA_OLED, SCL_OLED);
+ #elif BOARD_MODEL == BOARD_XIAO_S3
+ Wire.begin(SDA_OLED, SCL_OLED);
#endif
#if HAS_EEPROM
diff --git a/Makefile b/Makefile
index 13bd23b..8611107 100644
--- a/Makefile
+++ b/Makefile
@@ -143,6 +143,9 @@ firmware-heltec_t114:
firmware-techo:
arduino-cli compile --log --fqbn adafruit:nrf52:pca10056 -e --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x44\""
+firmware-xiao_s3:
+ arduino-cli compile --log --fqbn "esp32:esp32:XIAO_ESP32S3" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x3E\""
+
upload:
arduino-cli upload -p /dev/ttyUSB0 --fqbn unsignedio:avr:rnode
@@ -255,6 +258,13 @@ upload-techo:
@sleep 6
rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes from_device /dev/ttyACM0)
+upload-xiao_s3:
+ arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:XIAO_ESP32S3
+ @sleep 1
+ rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.XIAO_ESP32S3/RNode_Firmware.ino.bin)
+# @sleep 3
+# python ./Release/esptool/esptool.py --chip esp32s3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
+
release: release-all
release-all: console-site spiffs-image release-tbeam release-tbeam_sx1262 release-lora32_v10 release-lora32_v20 release-lora32_v21 release-lora32_v10_extled release-lora32_v20_extled release-lora32_v21_extled release-lora32_v21_tcxo release-featheresp32 release-genericesp32 release-heltec32_v2 release-heltec32_v3 release-heltec32_v2_extled release-heltec_t114 release-techo release-rnode_ng_20 release-rnode_ng_21 release-t3s3 release-t3s3_sx127x release-t3s3_sx1280_pa release-tdeck release-tbeam_supreme release-rak4631 release-hashes
diff --git a/RNode_Firmware.ino b/RNode_Firmware.ino
index 79bff2f..a116b3d 100644
--- a/RNode_Firmware.ino
+++ b/RNode_Firmware.ino
@@ -179,6 +179,13 @@ void setup() {
#endif
#endif
+ #if BOARD_MODEL == BOARD_XIAO_S3
+ // Improve wakeup from sleep
+ delay(300);
+ LoRa->reset();
+ delay(100);
+ #endif
+
// Check installed transceiver chip and
// probe boot parameters.
if (LoRa->preInit()) {
@@ -1611,10 +1618,13 @@ void loop() {
void sleep_now() {
#if HAS_SLEEP == true
+ stopRadio(); // TODO: Check this on all platforms
#if PLATFORM == PLATFORM_ESP32
- #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
- display_intensity = 0;
- update_display(true);
+ #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_XIAO_S3
+ #if HAS_DISPLAY
+ display_intensity = 0;
+ update_display(true);
+ #endif
#endif
#if PIN_DISP_SLEEP >= 0
pinMode(PIN_DISP_SLEEP, OUTPUT);
@@ -1626,7 +1636,6 @@ void sleep_now() {
delay(100);
}
#endif
- stopRadio();
esp_sleep_enable_ext0_wakeup(PIN_WAKEUP, WAKEUP_LEVEL);
esp_deep_sleep_start();
#elif PLATFORM == PLATFORM_NRF52
diff --git a/Utilities.h b/Utilities.h
index 7ec1941..3d46027 100644
--- a/Utilities.h
+++ b/Utilities.h
@@ -285,13 +285,9 @@ uint8_t boot_vector = 0x00;
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
void led_id_on() { }
void led_id_off() { }
- #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
- // tx pin is active high, rx pin is active low....
- // but shared with LED, choose button for now
-// void led_rx_on() { pinMode(pin_led_rx, OUTPUT); digitalWrite(pin_led_rx, LOW); }
-// void led_rx_off() { digitalWrite(pin_led_rx, HIGH); pinMode(pin_led_rx, INPUT); }
- void led_rx_on() { }
- void led_rx_off() { }
+ #elif BOARD_MODEL == BOARD_XIAO_S3
+ void led_rx_on() { digitalWrite(pin_led_rx, LED_ON); }
+ void led_rx_off() { digitalWrite(pin_led_rx, LED_OFF); }
void led_tx_on() { digitalWrite(pin_led_tx, LED_ON); }
void led_tx_off() { digitalWrite(pin_led_tx, LED_OFF); }
void led_id_on() { }
@@ -1276,6 +1272,7 @@ void setTXPower() {
if (model == MODEL_DC) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_DD) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
+ if (model == MODEL_DE) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_E4) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_E9) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
@@ -1480,7 +1477,7 @@ bool eeprom_product_valid() {
#if PLATFORM == PLATFORM_AVR
if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW) {
#elif PLATFORM == PLATFORM_ESP32
- if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1 || rval == PRODUCT_SEEED_XIAO_ESP32S3) {
+ if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1 || rval == PRODUCT_XIAO_S3) {
#elif PLATFORM == PLATFORM_NRF52
if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HELTEC_T114 || rval == PRODUCT_TECHO || rval == PRODUCT_HMBRW) {
#else
@@ -1516,8 +1513,8 @@ bool eeprom_model_valid() {
if (model == MODEL_16 || model == MODEL_17) {
#elif BOARD_MODEL == BOARD_TBEAM_S_V1
if (model == MODEL_DB || model == MODEL_DC) {
- #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
- if (model == MODEL_DD) {
+ #elif BOARD_MODEL == BOARD_XIAO_S3
+ if (model == MODEL_DD || model == MODEL_DE) {
#elif BOARD_MODEL == BOARD_LORA32_V1_0
if (model == MODEL_BA || model == MODEL_BB) {
#elif BOARD_MODEL == BOARD_LORA32_V2_0
diff --git a/sx126x.cpp b/sx126x.cpp
index 68bf7b1..30c22d9 100644
--- a/sx126x.cpp
+++ b/sx126x.cpp
@@ -122,17 +122,10 @@ sx126x::sx126x() :
{ setTimeout(0); }
bool sx126x::preInit() {
- #if BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
- // Improve wakeup from sleep
- delay(300);
- reset();
- delay(100);
- #endif
-
pinMode(_ss, OUTPUT);
digitalWrite(_ss, HIGH);
- #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_TDECK
+ #if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_XIAO_S3
SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs);
#elif BOARD_MODEL == BOARD_TECHO
SPI.setPins(pin_miso, pin_sclk, pin_mosi);
@@ -153,7 +146,6 @@ bool sx126x::preInit() {
break;
}
delay(100);
- Serial.println( uint16_t(syncmsb << 8 | synclsb) );
}
if ( uint16_t(syncmsb << 8 | synclsb) != 0x1424 && uint16_t(syncmsb << 8 | synclsb) != 0x4434) {
return false;
@@ -578,7 +570,7 @@ void sx126x::sleep() { uint8_t byte = 0x00; executeOpcode(OP_SLEEP_6X, &byte, 1)
void sx126x::enableTCXO() {
#if HAS_TCXO
- #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
+ #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_XIAO_S3
uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
#elif BOARD_MODEL == BOARD_TBEAM
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
diff --git a/sx126x.h b/sx126x.h
index 1703a8f..068a1bb 100644
--- a/sx126x.h
+++ b/sx126x.h
@@ -56,6 +56,7 @@ public:
void receive(int size = 0);
void standby();
void sleep();
+ void reset(void);
bool preInit();
uint8_t getTxPower();
@@ -111,7 +112,6 @@ private:
void handleLowDataRate();
void optimizeModemSensitivity();
- void reset(void);
void calibrate(void);
void calibrate_image(long frequency);
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────